﻿using System;
using System.Data;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Reflection;
using System.Windows.Forms;
using FBWMS.Properties;

namespace FBWMS
{
    class G_CommonClassOther
    {
        public G_CommonClassOther()
		{
		}

        ////////////////////////////////////////////////////////////////////////////
        // OutLine   : G_Other_FormOpen
        // Parameter : int_Mode                 :int            : モード(0:対象画面を終了する。,1:対象画面を終了しない。)
        // Parameter : str_Form_NM              :string         : フォーム名称
        // Return    : True Or False
        // Contents  : 画面Open関数
        // Makes     : 渡辺
        // History   : 2007/06/14       : 初版
        //           :
        ////////////////////////////////////////////////////////////////////////////
        public static bool G_Other_FormOpen(int int_Mode, string str_Form_NM)
        {
            //砂時計表示
            Cursor.Current = Cursors.WaitCursor;

            //現在のプロセスを終了する。
            Process process = Process.GetCurrentProcess();

            //待機画面以外はバージョンチェック対象
            if (str_Form_NM != "F_COM_Waiting")
            {
                //バージョンチェック
                if (G_CommonDefine.G_SystemPC_VersionFG.ToString() == "ON")
                {
                    //バージョン管理exeで起動されているかどうかチェックする。
                    if (process.ProcessName.ToString() != G_CommonDefine.G_SystemPC_exetempName.ToString())
                    {
                        //ローカルexeのバージョン
                        string str_LocalVersion = G_CommonDefine.G_SystemPC_Version.ToString();

                        //サーバーのCommonDefine.XMLのSystemPCのversionを取得する。
                        string str_ServerXML = G_CommonDefine.G_SystemPC_exePathServer.ToString() + "CommonDefine.xml";
                        xmlData[,] getSystemPCInfo;
                        string[] Nodes = new string[2];
                        Nodes[0] = G_CommonDefine.NodeNM.Common.connectionNode;
                        Nodes[1] = G_CommonDefine.NodeNM.Common.SubSystemPC;

                        G_CommonClassXML.G_XML_Read(str_ServerXML, Nodes, out getSystemPCInfo);
                        string str_ServerVersion = getSystemPCInfo[0, 6].NodeValue.ToString();

                        //バージョンチェック
                        if (str_LocalVersion != str_ServerVersion)
                        {
                            //ダウンロードメッセージ表示
                            MessageBox.Show(Resources.G_Other_FormOpen, Resources.確認, MessageBoxButtons.OK, MessageBoxIcon.Information);

                            return false;
                        }
                    }
                }
            }

            if (int_Mode == 0)
            {
                //すでに画面が開かれていればCloseする。
                G_Other_FormClose(str_Form_NM);
            }

            //フォームを開くためのインスタンスを生成してフォームを開く
            Assembly asm = Assembly.GetExecutingAssembly();
            Type ftype = asm.GetType("FBWMS." + str_Form_NM);
            Form frm = (Form)Activator.CreateInstance(ftype);

            //存在チェック
            if (frm.IsDisposed != true)
            {
                frm.WindowState = FormWindowState.Maximized;
                frm.Text = frm.Text + "-" + G_CommonDefine.G_str_Customer_CD;
                frm.ShowDialog();
                
            }

            //砂時計解除
            Cursor.Current = Cursors.Default;

            return true;
        }

        ////////////////////////////////////////////////////////////////////////////
        // OutLine   : G_Other_FormClose
        // Parameter : str_Form_NM              :string         : フォーム名称
        // Return    : True Or False
        // Contents  : 画面終了関数
        // Makes     : 渡辺
        // History   : 2007/06/14       : 初版
        //           :
        ////////////////////////////////////////////////////////////////////////////
        public static bool G_Other_FormClose(string str_Form_NM)
        {
            int int_CNT = int.Parse(Application.OpenForms.Count.ToString());
            while (int_CNT != 0)
            {
                if (Application.OpenForms[int_CNT - 1].Name.ToString() == str_Form_NM)
                {
                    Application.OpenForms[int_CNT - 1].Close();
//                    break;
                }
                //カウンタダウン
                int_CNT = int_CNT - 1;
            }

            return true;
        }

        ////////////////////////////////////////////////////////////////////////////
        // OutLine   : G_Other_LoginTimeOut
        // Parameter : 无
        // Return    : True Or False ; True = 没有超时 False = 超时
        // Contents  : タイムアウトチェック関数
        // Makes     : 渡辺
        // History   : 2007/06/14       : 初版
        // Update    : Tony 2008/10/15
        //           :
        ////////////////////////////////////////////////////////////////////////////
        public static bool G_Other_LoginTimeOut()
        {
            //如果最后登录时间+超时时间小于,超时,再次登录,否则返回没有超时
            if (G_CommonDefine.G_DT_LastLogInTime.AddMinutes(G_CommonDefine.G_IntervalLogIn) < DateTime.Now)
            {
                //打开登录界面
                Form F_COM_LogIn = new F_LogIn();
                if (F_COM_LogIn.IsDisposed != true)
                {
                    F_COM_LogIn.ShowDialog();

                    //是否登录成功
                    if (G_CommonDefine.G_boo_LogInRetry_FG == true)
                    {
                        return true;
                    }
                    else
                    {
                        //登录已经超时！
                        return false;
                    }
                }
            }
            else 
            {
                return true;
            }

            return true;
        }

        ////////////////////////////////////////////////////////////////////////////
        // OutLine   : G_Other_DisplayAuthority
        // Parameter : str_Form_NM              :string         : フォーム名称
        // Return    : True Or False
        // Contents  : 権限情報確認関数
        // Makes     : 渡辺
        // History   : 2007/06/14       : 初版
        //           :
        ////////////////////////////////////////////////////////////////////////////
        public static bool G_Other_DisplayAuthority(string str_Form_NM)
        {
                //データセット宣言
                DataSet ds;
                SqlConnection connect;

                //DB接続
                if (!G_CommonClassDB.G_DB_Connect(out connect))
                {
                    //エラーメッセージ表示
                    MessageBox.Show(Resources.P_Search);

                    //砂時計解除
                    return false;
                }

                SqlCommand sqlCmd = connect.CreateCommand();
                SqlParameter[] sqlPara = new SqlParameter[1];
                sqlPara[0] = G_CommonClassDB.G_DB_SetSQLDBParameter("@Target_NM", ParameterDirection.Input, SqlDbType.VarChar, 50, str_Form_NM);


                //ストアド実行(帳票出力レコード取得)
                switch (G_CommonClassDB.G_DB_ExecStoredProc(connect, sqlCmd, "USP_COM_M_Authority_DataSelect", sqlPara, out ds))
                {
                    case G_CommonDefine.RetValue.GetData:
                        //権限情報比較
                        if (int.Parse(ds.Tables[0].Rows[0]["Work_ST"].ToString()) > int.Parse(G_CommonDefine.G_WorkST.ToString()))
                        {
                            //データなし
                            return false;
                        }

                        break;
                    case G_CommonDefine.RetValue.NoData:
                        return false;
                    default:
                        break;
                }

            //画面を開く権限があったのでtrueで返す。
            return true;
        }

        ////////////////////////////////////////////////////////////////////////////
        // OutLine   : G_Other_WaitForm
        // Parameter : boo_Mode              :bool         : モード：true(画面表示)/false(画面終了)
        // Return    : True Or False
        // Contents  : 待機画面表示制御関数
        // Makes     : 渡辺
        // History   : 2007/06/14       : 初版
        //           :
        ////////////////////////////////////////////////////////////////////////////
        public static bool G_Other_WaitForm(bool boo_Mode)
        {
            if (G_CommonDefine.G_SystemPC_WaitFormFG == false)
            {
                return true;
            }

            if (boo_Mode == true)
            {
                //待機画面の表示
                if ((G_CommonDefine.G_F_COM_Waiting == null) || G_CommonDefine.G_F_COM_Waiting.IsDisposed)
                {
                    G_CommonDefine.G_F_COM_Waiting = new F_COM_Waiting();
                    G_CommonDefine.G_F_COM_Waiting.Show();
                    G_CommonDefine.G_F_COM_Waiting.Refresh();
                }
                else
                {
                    G_CommonDefine.G_F_COM_Waiting.Close();
                    G_CommonDefine.G_F_COM_Waiting = new F_COM_Waiting();
                    G_CommonDefine.G_F_COM_Waiting.Show();
                    G_CommonDefine.G_F_COM_Waiting.Refresh();
                }

                //砂時計表示
                G_CommonDefine.G_F_COM_Waiting.Cursor = Cursors.WaitCursor;
            }
            else 
            {
                G_CommonDefine.G_F_COM_Waiting.Close();
                //砂時計解除
                G_CommonDefine.G_F_COM_Waiting.Cursor = Cursors.Default;
            }

            //正常値を返す
            return true;
        }

        ////////////////////////////////////////////////////////////////////////////
        // OutLine   : G_Other_WaitForm_Msg
        // Parameter : str_Msg              :string         : メッセージ
        // Return    : True Or False
        // Contents  : 待機画面表示メッセージ設定関数
        // Makes     : 渡辺
        // History   : 2007/06/14       : 初版
        //           :
        ////////////////////////////////////////////////////////////////////////////
        public static bool G_Other_WaitForm_Msg(string str_Msg)
        {
            G_CommonDefine.G_F_COM_Waiting.Controls["txt_Msg"].Text = str_Msg;
            G_CommonDefine.G_F_COM_Waiting.Controls["txt_Msg"].Refresh();

            G_CommonDefine.G_F_COM_Waiting.Controls["txt_Now"].Text = DateTime.Now.ToString();
            G_CommonDefine.G_F_COM_Waiting.Controls["txt_Now"].Refresh();

            //正常値を返す
            return true;
        }


        public static string G_AddLenght(string str_Msg,int iLenght,bool bRight)
        {
            int iStringLen = GetLength(str_Msg);
            string sReturnString = str_Msg;
            if (iLenght > iStringLen)
            {
                while (iLenght > iStringLen)
                {
                    sReturnString += " ";
                    iStringLen++;
                }
            }
            else
            {
                if (bRight)
                    sReturnString = sReturnString.Substring(sReturnString.Length - iLenght, iLenght);
                else
                    sReturnString = sReturnString.Substring(0, iLenght);
            }
            return sReturnString;
        }

        public static string G_AddLenght(int str_Msg, int iLenght, bool bRight)
        {
            int iStringLen = str_Msg.ToString().Length;
            string sReturnString = str_Msg.ToString();
            if (iLenght > iStringLen)
            {
                while (iLenght > iStringLen)
                {
                    sReturnString = "0" + sReturnString;
                    iStringLen++;
                }
            }
            return sReturnString;
        }

        public static int GetLength(String aOrgStr)
        {
            int intLen = aOrgStr.Length;
            int i;
            char[] chars = aOrgStr.ToCharArray();
            for (i = 0; i < chars.Length; i++)
            {
                if (System.Convert.ToInt32(chars[i]) > 255)
                {
                    intLen++;
                }
            }
            return intLen;
        }
　　

    }
}
